package com.ahorresas.modelo.daos;

import com.ahorresas.conexion.Conexion;
import com.ahorresas.modelo.beans.VigenciaBean;
import com.ahorresas.modelo.sqls.VigenciaSql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class VigenciaDao {
    
    Conexion conexion = new Conexion();
    Connection con;
    VigenciaSql sql = new VigenciaSql();
    
   public VigenciaBean buscarVigencia(int idVigencia){
        con = conexion.getConexion();
        VigenciaBean vigencia = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.buscarVigencia());
            ps.setInt(1, idVigencia);
            ResultSet resultado = ps.executeQuery();
            if(resultado.next()){
                vigencia = new VigenciaBean();
                vigencia.setVigencia(resultado.getInt("vigencia"));
                vigencia.setPorcentajeGanancia(resultado.getDouble("porcentaje_ganancia"));
                vigencia.setPorcentajeDeuda(resultado.getDouble("porcentaje_deuda"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally{
            conexion.cerrarConexion(con);
        }
        return vigencia;
    }
    
    public List<VigenciaBean> listarVigencias(){
        con = conexion.getConexion();
        List<VigenciaBean> listaVigencias = new ArrayList<>();
        VigenciaBean vigencia;
        try {
            PreparedStatement ps = con.prepareStatement(sql.listarVigencias());
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                vigencia = new VigenciaBean();
                vigencia.setVigencia(resultado.getInt("vigencia"));
                vigencia.setPorcentajeGanancia(resultado.getDouble("porcentaje_ganancia"));
                vigencia.setPorcentajeDeuda(resultado.getDouble("porcentaje_deuda"));
                listaVigencias.add(vigencia);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally{
            conexion.cerrarConexion(con);
        }
        return listaVigencias;
    }
    
    public int crearVigencia(VigenciaBean vigencia){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.crearVigencia());
            ps.setInt(1, vigencia.getVigencia());
            ps.setDouble(2, vigencia.getPorcentajeGanancia());
            ps.setDouble(3, vigencia.getPorcentajeDeuda());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        } 
        return resultado;
    }
    
    public int modificarVigencia(VigenciaBean vigencia){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.modificarVigencia());
            ps.setDouble(1, vigencia.getPorcentajeGanancia());
            ps.setDouble(2, vigencia.getPorcentajeDeuda());
            ps.setInt(3, vigencia.getVigencia());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
    
    public int eliminarVigencia(Integer idVigencia){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.eliminarVigencia());
            ps.setInt(1, idVigencia);
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
}